/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pessoas.CommandContato;

import java.io.IOException;
import javax.swing.JOptionPane;
import pessoas.collection.Contatos;
import pessoas.collection.Operadoras;
import pessoas.dataHora.DataHora;
import pessoas.interfaces.ICommandContato;
import pessoas.model.Contato;
import pessoas.model.Usuario;
import pessoas.presenter.ContatoPresenter;
import pessoas.presenter.stateContatoView.VisualizacaoState;

/**
 *
 * @author Bush
 */
public class SalvarCommand implements ICommandContato {

    private DataHora dataHora;
    private ContatoPresenter presenter;
    private Contatos contatos;
    private Usuario usuario;

    public SalvarCommand(ContatoPresenter presenter, Contatos contatos, Usuario usuario) {
        dataHora = new DataHora();
        this.presenter = presenter;
        this.contatos = contatos;
        this.usuario = usuario;
    }

    @Override
    public void exercutar() {
        Contato contato = null;
        try {
            String nome = presenter.getView().getTxtNome().getText();
            String sobrenome = presenter.getView().getTxtSobrenome().getText();
            Object telefone = presenter.getView().getTxtTelefone().getValue();
            contato = new Contato(nome, sobrenome, String.valueOf(telefone), null, null);

            //--------------verificaçao da uf e operadora---------------        
            contato = Operadoras.getInstancia().detectaUfOperadora(contato);

            if ((!nome.equals("")) && (!sobrenome.equals("")) && (telefone != null)) {
                if (contatos.verificaContato(contato)) {
                    throw new Exception("O contato já existe !!");
                }
                contatos.salvarContato(contato);
                contatos.gravarLog("<Inclusão> do contato <<" + contato.getNome() + ">>,<<" + dataHora.getHora() + ">>,<<" + dataHora.getData()
                        + ">>,<<" + usuario.getNomeUsuario() + ">>.");
                JOptionPane.showMessageDialog(null, nome + " " + sobrenome + " Cadastrado com sucesso!");
                presenter.setEstado(new VisualizacaoState(presenter, contato));
            } else {
                throw new IllegalArgumentException("Você precisa informar os campos");
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            try {
                contatos.gravarLog("Ocorreu a falha:" + ex.getMessage() + "ao realizar <Inclusão> do contato <<" + contato.getNome()
                        + ">>,<<" + dataHora.getHora() + ">>,<<" + dataHora.getData()
                        + ">>,<<" + usuario.getNomeUsuario() + ">>.");
            } catch (IllegalAccessException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (InstantiationException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (ClassNotFoundException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (IOException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            }
        }
    }

}
